#include <stdio.h>

// 1. 定义传感器类型枚举
typedef enum
{
  TEMPERATURE,
  HUMIDITY,
  PRESSURE
} SensorType;

// 2. 定义传感器数据联合体
typedef union
{
  float temperature; // 温度，浮点型
  int humidity;      // 湿度，整数型(0-100)
  float pressure;    // 气压，浮点型
} SensorData;

int main()
{
  // 创建传感器类型变量
  SensorType sensor_type;
  // 创建传感器数据变量
  SensorData sensor_data;

  // 提示用户选择传感器类型
  printf("请选择传感器类型(0-温度, 1-湿度, 2-气压): ");
  int input_type;
  scanf("%d", &input_type);
  sensor_type = (SensorType)input_type;

  // 根据传感器类型输入相应数据
  switch (sensor_type)
  {
  case TEMPERATURE:
    printf("请输入温度值(℃): ");
    scanf("%f", &sensor_data.temperature);
    break;
  case HUMIDITY:
    do
    {
      printf("请输入湿度值(0-100%%): ");
      scanf("%d", &sensor_data.humidity);
      // 确保湿度在有效范围内
      if (sensor_data.humidity < 0 || sensor_data.humidity > 100)
      {
        printf("湿度值必须在0-100之间，请重新输入！\n");
      }
    } while (sensor_data.humidity < 0 || sensor_data.humidity > 100);
    break;
  case PRESSURE:
    printf("请输入气压值(hPa): ");
    scanf("%f", &sensor_data.pressure);
    break;
  default:
    printf("无效的传感器类型！\n");
    return 1; // 程序异常退出
  }

  // 输出传感器数据
  printf("\n传感器数据输出:\n");
  switch (sensor_type)
  {
  case TEMPERATURE:
    printf("温度: %.2f ℃\n", sensor_data.temperature);
    break;
  case HUMIDITY:
    printf("湿度: %d %%\n", sensor_data.humidity);
    break;
  case PRESSURE:
    printf("气压: %.2f hPa\n", sensor_data.pressure);
    break;
  }

  return 0;
}
